package com.lucy.starter.loader;

import cn.hutool.core.lang.Validator;
import com.lucy.starter.domain.vo.BaseUser;

import java.util.ArrayList;
import java.util.List;

/**
 * @author kindear
 * RBAC /鉴权 系统接入服务
 */
public interface AuthService {
    /**
     * 获取会话用户ID
     * @return 用户ID String
     */
    default String getUserId(){
        BaseUser baseUser = getUser();
        if (Validator.isEmpty(baseUser)){
            return "0";
        }else {
            return baseUser.getUserId();
        }
    }

    /**
     * 获取会话用户账号 用户名
     * @return 用户名 String
     */
    default String getUserName(){
        BaseUser baseUser = getUser();
        if (Validator.isEmpty(baseUser)){
            return "guest";
        }else {
            return baseUser.getUserName();
        }

    }

    /**
     * 获取用户昵称
     * @return 用户昵称
     */
    default String getNickName(){
        BaseUser baseUser = getUser();
        if (Validator.isEmpty(baseUser)){
            return "匿名用户";
        }else {
            return baseUser.getNickName();
        }
    }

    /**
     * 获取会话用户基础信息
     * @return 会话用户基础信息
     *
     */
    default BaseUser getUser(){
        BaseUser baseUser = new BaseUser();
        baseUser.setUserId("0");
        baseUser.setUserName("guest");
        baseUser.setNickName("匿名用户");
        return baseUser;
    }

    /**
     * 获取会话令牌
     * @return 用户令牌TOKEN
     */
    default String getToken(){
        return "token";
    }

    /**
     * 判断当前会话用户是否处于登陆态
     * @return 登录态
     */
    default Boolean isLogin(){
        return false;
    }

    /**
     * 判断当前登录用户是否是管理员角色
     * @return 管理员身份验证结果
     */
    default Boolean isAdmin() {
        return false;
    }

    /**
     * 判断当前会话用户是否拥有某角色
     * @param roleKey 角色标识符
     * @return bool
     */
    default Boolean hasRole(String roleKey){
        return false;
    }
    /**
     * 判断当前会话用户是否拥有某权限
     * @param perm 权限标识
     * @return bool
     */
    default Boolean hasPerm(String perm){
        return false;
    }

    /**
     * 获取当前会话用户拥有的角色列表标识
     * @return list
     */
    default List<String> getRoles(){
        return new ArrayList<>();
    }

    /**
     * 获取当前会话用户拥有的权限列表
     * @return list
     */
    default List<String> getPerms(){
        return new ArrayList<>();
    }

    /**
     * 拓展实现登录操作
     * @return 登录返回值 String
     */
    default Boolean doLogin(Object id){
        return false;
    }

    /**
     * 拓展实现登出操作
     * @param id
     * @return 登出操作是否成功
     */
    default Boolean doLogout(Object id){
        return false;
    }

    /**
     * 拓展实现禁止操作
     * @param id
     * @param hour 单位是 h 小时
     */
    default void doBan(Object id,Integer hour){

    }

    /**
     * 是否处于禁止状态
     * @param id
     * @return
     */
    default Boolean isBan(Object id){
        return false;
    }

}
